package com.example.demo.controller;

import com.example.demo.dto.ApiResponse;
import com.example.demo.entity.Comment;
import com.example.demo.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 评论管理控制器
 * 处理与评论相关的HTTP请求，包括评论的创建、查询、删除等操作
 * 提供RESTful API接口，支持评论的树形结构展示和多级回复功能
 */
@RestController
@RequestMapping("/api/comments")
public class CommentController {

    @Autowired
    private CommentService commentService;

    /**
     * 获取指定帖子的所有评论，以树形结构返回
     * 
     * @param postId 帖子ID
     * @return 返回该帖子下的所有评论，包括评论的层级关系
     */
    @GetMapping("/post/{postId}")
    public ApiResponse<List<Comment>> getPostComments(@PathVariable Long postId) {
        return ApiResponse.success(commentService.getCommentTree(postId));
    }

    /**
     * 获取指定评论的直接回复
     * 
     * @param commentId 评论ID
     * @return 返回指定评论的直接回复列表
     */
    @GetMapping("/{commentId}/replies")
    public ApiResponse<List<Comment>> getCommentReplies(@PathVariable Long commentId) {
        return ApiResponse.success(commentService.getDirectReplies(commentId));
    }

    /**
     * 添加新评论或回复
     * 
     * @param comment 评论实体，包含评论内容、父评论ID（如果是回复）等信息
     * @return 返回添加结果，true表示添加成功
     */
    @PostMapping
    public ApiResponse<Boolean> addComment(@RequestBody Comment comment) {
        return ApiResponse.success(commentService.addComment(comment));
    }

    /**
     * 删除评论
     * 如果删除的是父评论，将同时删除其下的所有子评论
     * 
     * @param id 要删除的评论ID
     * @return 返回删除结果，true表示删除成功
     */
    @DeleteMapping("/{id}")
    public ApiResponse<Boolean> deleteComment(@PathVariable Long id) {
        return ApiResponse.success(commentService.deleteComment(id));
    }
}